<?php

// 该方法获取请求里面的响应头的locatin属性值，没有的话直接返回原来的url
// 注意：url_param的值，需要使用encodeURIComponent编码一次，避免嵌套查询参数导致url_param的值不全
// deep_count 参数用于控制重复重定向的次数，即获取location次数。默认获取location一次。
function getResponseHeaderLocation($url_param = '', $deep_count = 1)
{
  $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL, urldecode($url_param)); // 设置URL
  curl_setopt($ch, CURLOPT_HEADER, true); // 获取头信息
  curl_setopt($ch, CURLOPT_NOBODY, true); // 不获取body内容
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 返回结果而不是输出到浏览器
  curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 禁用 SSL 证书验证（不推荐）
  $response = curl_exec($ch); // 执行cURL会话并获取响应头和体信息
  if (curl_errno($ch)) {
    // echo 'Error:' . curl_error($ch);
  } else {
    // 获取头信息部分并解析Location头
    $header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
    $header = substr($response, 0, $header_size);
    $headers = explode("\r\n", trim($header));
    curl_close($ch); // 关闭cURL会话
    $location = '';
    foreach ($headers as $header) {
      if (stripos($header, 'location:') === 0) {
        $location = trim(substr($header, strlen('location:')));
        // echo "Location1: $location"; // 输出Location头的内容
        $deep_count -= 1;
        $url_param = $deep_count == 0 ? $location : getResponseHeaderLocation($location, $deep_count);
        break; // 找到后退出循环
      }
    }
    //echo "Location2: " + json_encode($response); // 输出Location头的内容
  }
  return $url_param;
}

// 注意：url的值，需要使用encodeURIComponent编码一次，避免嵌套查询参数导致url的值不全
// 获取来自前端的 GET 请求参数 'url_param'
$url_param = isset($_GET['url_param']) ? urldecode($_GET['url_param']) : '';
$deep_count = isset($_GET['deep_count']) ? $_GET['deep_count'] : 1;
if (!$url_param && !$deep_count) {
  echo '需要两个参数：url和deep_count，其中url需要使用encodeURIComponent编码；deep_count控制重复重定向的次数，默认为1。';
} else {
  // $url_param = 'https://hifini.com/get_music.php?key=4QHgf3vf2ytVjZ6JrOq9Ius5YRlk8aDH9nPlMEQsW04TH0TwTwxhH5omuGgZJUN7gV8VdsCfJrwwwHiFiNicome4hewlN0RW1g&p=BMBTIERAGAWCEBYJBMUSUFL6IBHEEPY6GEQSOLYKEECAWFR7ARTQ4DKEB4PTUKZSFY2DUWZ7EJLWIW35HYCBQHZOAIPDSHRLAYVVW6KQKYMBUIQZBIKR45Y6CQMCKW3RKB5R4FAYEUABIMIAA4ESIGSFIBYVYMI6HEQQUKIEBUFAOGZXMVAE4QR7DYYSCJZPBIQQINACAVFVGSS7IEHQ6AAAAAAAAAA3C4BFQZL4MAXEEQJACEXQAOZGHMQCS5K6JVRA4TY2GIQCSDD3A5KF4XDWAUEVIOBAHEMQHiFiNiYINYUECICHANGHiFiNiYINYUECICHANGHiFiNiYINYUECICHANGHiFiNiYINYUECICHANG';
  echo getResponseHeaderLocation($url_param, $deep_count);
}

?>